ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

Процессор PSX представляет собой модифицированный R3000A от MIPS. Произвела этот процессор на свет компания LSI (см фото). Процессор имеет MIPS RISC архитектуру и работает на тактовой частоте 33.8688 МГц. Производительность PSX-R3000A 30 миллионов операций в секунду. Внутри него находятся два кэша: кэш кода (4 KB) и кэш данных (1 KB). Процент обоих кэш-промахов составляет около 20%. Кэш кода организован в виде записей по 16 байт. Принцип работы основан на тэгах. Кэш данных организован в виде записей по 4 байта. Оба кэша работают по принципу сквозной записи (write-through, запись производится одновременно в кэш и память, но считывается только из кэша). Пропускная способность шины - 132 MB/сек. Порядок байт обратный - little-endian (как у семейства x86), но его можно изменить на big-endian (как у Motorolla). Впрочем все игры, как и BIOS (вернее из-за BIOS) используют обратный порядок (little-endian). Суперскалярная архитектура отсутствует (только одно АЛУ). Механизм трансляции виртуального адреса (MMU) также вырезан [!] Слово имеет размер - 32 бита, полу-слово - 16 бит, байт - 8 бит. Архитектура MIPS позволяет подключить к процеесору до 4 сопроцессоров (COP0, COP1, COP2 и COP3). У PSX-R3000A только 2 сопроцессора: системный (COP0) и геометрический (COP2 или GTE). COP0 интегрирован непосредственно на чипе процессора. COP1, или математический сопроцессор, по каким-то причинам отсутствует. Согласно MIPS-архитектуре, у PSX-R3000A есть 32 регистра общего назначения. Кроме этого у него еще есть регистры для операций встроенного умножителя/делителя (HI и LO) и счетчик команд (PC). Ниже приведены мнемонические обозначения всех регистров центрального процессора:

номер регистра мнемоника описание
r0
zr
zero. значение этого регистра всегда равно нулю (аппаратно!)
r1
at
asm temp. регистр для промежуточных вычислений. часто используется в указателях.
r2-r3
v0-v1
result values. используются, как выходные значения функций.
r4-r7
a0-a3
argument values. используются, как входные значения функций.
r8-r15
t0-t7
temp. временные регистры (для "мусора" промежуточных операций)
r16-r23
s0-s7
save. сохраняются функциями в стеке, при их (функций) вызове.
r24-r25
t8-t9
temp. еще одни временные регистры, в дополнение к t0-t7.
r26-r27
k0-k1
kernel. регистры, предназначенные для внутреннего использования ядром PSX-OS.
r28
gp
global pointer. глобальный указатель. используется ядром.
r29
sp
stack pointer. указатель стека. используется при сохранении регистров в стеке.
r30
fp
frame pointer. еще один указатель. используется очень редко.
r31
ra
return address. содержит адрес возврата, после вызова функции.

В регистре HI содержится старшая часть результата при умножении, или остаток при делении. В регистре LO содержится младшая часть результата при умножении, или частное при делении. PC является счетчиком команд.

ИНСТРУКЦИИ R3000A

Набор операций R3000A ничем не отличается от любых других 32-битных платформ, за исключением мнемоники. Из всего набора есть только пара-тройка специфических инструкций, да и то они нигде не используются.

КАК ВСЕ ЭТО ЭМУЛИРУЕТСЯ

Sony очень упростила задачу эмуляции R3000A, вырезав из него практически все трудноэмулируемые узлы (FPU, MMU). Решение это было условлено тем, чтобы приспособить процессор PSX только для одной единственной задачи - игровой программы. при эмуляции R3000A возникает единственный и очень важный вопрос - TO CUT, OR NOT TO CUT... то есть вначале неясно что можно вырезать и не эмулировать, а что оставить. ответ возникает в процессе эмуляции. просто нужно задать себе такую цель - "а мне это надо?". и всё! HAPPY CODING!

назад...

Hosted by uCoz